#pragma once

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>

typedef int HPDataType;

typedef struct Heap
{
	HPDataType* _a;
	int _size;
	int _capacity;
}Heap;

void HeapInit(Heap* php);
// 堆的销毁
void HeapDestory(Heap* php);
// 堆的插入
void HeapPush(Heap* php, HPDataType x);
// 堆的删除
void HeapPop(Heap* php);
// 取堆顶的数据
HPDataType HeapTop(Heap* php);
// 堆的数据个数
int HeapSize(Heap* php);
// 堆的判空
int HeapEmpty(Heap* php);

void Adjustup(HPDataType* a, int child);

void Swap(HPDataType* p1, HPDataType* p2);

void Heapsort(int* a, int n);

void AdjustDown(HPDataType* a, int n, int parent);